-- ------------------------------------------
-- IngresarGol
-- Se registra un gol en un partido. Hay que especificar si fue gol normal o autogol.
-- ------------------------------------------

CREATE OR REPLACE FUNCTION IngresarGol(param_idPartido partidos.idPartido%TYPE,
                            param_esAutogol goles.esAutogol%TYPE,
                            param_fueVisita boolean,
                            param_idJugador jugadores.idJugador%TYPE,
                            param_minuto    goles.minuto%TYPE,
                            param_tiempo    int)
RETURNS void AS $$

        DECLARE
                id      goles.idGol%TYPE;
                partido partidos%ROWTYPE;
                jugador jugadores%ROWTYPE;

	BEGIN
		-- Excepciones
                IF (param_idPartido IS NULL OR param_esAutogol IS NULL OR param_fueVisita IS NULL) THEN
                    RAISE EXCEPTION 'Existen campos vacios.';
                END IF;

                -- Buscar ese partido
                SELECT INTO partido * FROM partidos WHERE idPartido = param_idPartido;

		-- Excepciones
                IF (partido IS NULL) THEN
                    RAISE EXCEPTION 'El partido no existe';
                END IF;

                -- Ver si jugador pertenece al equipo correspondiente
                SELECT INTO jugador * FROM jugadores WHERE idJugador = param_idJugador;

                IF (param_fueVisita AND jugador.idEquipo != partido.idEquipoVisita) THEN
                    RAISE EXCEPTION 'El jugador no pertenece al equipo visita';
                END IF;

                IF (param_fueVisita = FALSE AND jugador.idEquipo != partido.idEquipoLocal) THEN
                    RAISE EXCEPTION 'El jugador no pertenece al equipo local';
                END IF;

                -- Ver si el tiempo es correcto
                IF (param_tiempo > 3 OR param_tiempo < 1) THEN
                    RAISE EXCEPTION 'El tiempo debe ser 1, 2 o 3';
                END IF;


                -- Insert gol
                IF (param_fueVisita) THEN
                    INSERT INTO goles (idJugador      , idPartido      , idEquipo               , minuto       , tiempo      , esAutogol)
                               VALUES (param_idJugador, param_idPartido, partido.idEquipoVisita ,  param_minuto, param_tiempo, param_esAutogol);
                ELSE
                    INSERT INTO goles (idJugador      , idPartido      , idEquipo               , minuto       , tiempo      , esAutogol)
                               VALUES (param_idJugador, param_idPartido, partido.idEquipoLocal  ,  param_minuto, param_tiempo, param_esAutogol);
                END IF;


	END;

$$ LANGUAGE plpgsql